שאלה פתרון בחינת הבגרות פרק ראשון א. ערך מוחזר x y x>y מצב התור [, 4, 8, 7, 20, ] 4 F 6 + 3 = 9 [4, 8, 7, 20,, 4] 4 8 F 2 + 4 = 6 [8, 7, 20,, 4, 8] 8 7 F 3 + 9 = 2 [7, 20,, 4, 8, 7] 7 20 F 0 + 3 = 3 [20,, 4, 8, 7, 20] 20 T 0 )6( התור בסיום: 20] [, 4, 8, 7, )( ערך מוחזר: )ללא שינוי( (i) הפעולה מחשבת ומחזירה את סכום ההפרשים שבין כל שני איברים סמוכים בתור. מכיוון שהתור ממויין, יוצא שהערך המוחזר הינו ההפרש שבין האיבר הראשון והאיבר האחרון בתור. (ii) בסיום יישאר התור ללא שינוי. בעקבות ההחלפה יתקבל זימון אינסופי שייעצר רק כשמחסנית הזימונים "תעלה על גדותיה" ותתרחש גלישה: שגיאה מסוג Stack Overflow )6( )3( ב. 0 2 3 4 5 6 ar 2 29 66 6 27 60 34 7 משפט הזימון: 5) go(ar, 2, יחזיר: x y x==y ar[x] ar[y] ar[x]%0< ar[y]%0 משפט זימון 2 5 F 66 60 F go (ar, 2, 4) 2 4 F 66 27 T go(ar, 3, 4) 3 4 F 6 27 T go(ar, 4, 4) 4 4 T 27 )(.y ו- x משפט הזימון: ar.length-) go(ar, 0, יחזיר: 9 הפעולה go מחזירה את ספרת האחדות הגדולה ביותר בתאי המערך, בין המקומות )6( )3(
6 } תרגיל דרך I 2 האם-מסלול-עולה? (tr) { פעולה המחזירה אמת אם קיים בעץ מסלול המתחיל בשורש העץ ומסתיים באחד העלים, וערך הצמתים ממוין בסדר עולה, ושקר אחרת. הנחה: העץ לא לא ריק שערכיו מספרים שלמים השונים זה מזה. אם )עלה? )(tr) החזר אמת // אם )יש ל- tr בן שמאלי שערכו גדול מערך הצומת של ) tr left אמת left שקר אחרת אם )יש ל- tr בן ימני שערכו גדול מערך הצומת של )tr right אמת right שקר אחרת אם )אחד הצדדים תקין( החזר left right החזר שקר וגם וגם // האם-מסלול-עולה? )בן שמאלי של )tr האם-מסלול-עולה? )בן ימני של )tr בדיקת המסלול הסתיימה בהצלחה או אף אחד מהבנים לא נמצא במסלול ממוין יש לממש גם את הפעולה עלה? (tr)
3 דרך II פתרון של: אביטל Evi גרינולד תנאי קדם: תנאי בתר: תנאי קדם: תנאי בתר: הפעולה מקבלת עץ בינרי של מספרים שלמים טבעיים ( שלמים גדולים מ ) שונים זה מזה הפעולה מחזירה 'אמת' אם קיים מסלול עולה משורש עד עלה, שקר אחרת. public static boolean uppath(binnode<integer> tr) { if (tr == null) return false; if (tr.getleft() == tr.getright()) return true; } return uppath (tr.getleft(), tr.getvalue()) uppath (tr.getright(), tr.getvalue()); הפעולה מקבלת עץ בינרי של מספרים שלמים טבעיים ( שלמים גדולים מ ) שונים זה מזה ומספר טבעי x הפעולה מחזירה 'אמת' אם קיים מסלול עולה משורש העץ עד עלה שערך השרש שלו גדול מ, x שקר אחרת. private static boolean uppath(binnode<integer> tr, int x) { if (tr == null) return false; if (tr.getvalue() <= x) return false; if (! tr.hasleft() &&! tr.hasright()) return true; } return uppath (tr.getleft(), tr.getvalue()) uppath(tr.getright(), tr.getvalue());
4 Java שאלה 3 א. ב. סיבוכיות זמן הריצה היא.O(n) סה"כ n צעדים טבעות מהמוט למוטות העזר : ()O n * נימוק: העברת n סה"כ n צעדים טבעות משני מוטות העזר: ()O n * החזרת n O(n) = 2n סה"כ: f (n)
5 C# שאלה 3 א. ב. סיבוכיות זמן הריצה היא.O(n) סה"כ n צעדים טבעות מהמוט למוטות העזר : ()O n * נימוק: העברת n סה"כ n צעדים טבעות משני מוטות העזר: ()O n * החזרת n O(n) = 2n סה"כ: f (n)
2 שאלה 4 Java: C#: ב. )( טבלת מעקב: left value right value sum I left right II left.getright right III left.val + right.val == sum I && II && III left == right left.get Right == sum ערך מוחזר 3 8 2 T T T true 0 T T T true 27 27 F false true false ניתן להחליף את התנאי. נימוק: הפעולה מחזירה אמת אם סכום כל זוגות איברים הנמצאים במרחק שווה מקצות הרשימה שווים )סימטרי-סכומים(. הלולאה עוצרת כאשר הגיעה לאמצע הרשימה או כאשר נמצא זוג איברים שסכומם שונה. עבור רשימה באורך אי-זוגי, מוחזר אמת אם האיבר האמצעי שווה לסכום זה, אחרת מוחזר שקר. בכל מקרה אחר מוחזר אמת אם סכום שני האיברים במקומות left ו- right שווה ל-,sum אחרת מוחזר שקר. ולכן, ניתן להחליף את הקטע המסומן בהוראה: "החזר: סכום האיברים במקומות left ו- right שווה ל- "sum )2(
7 פרק שלישי מערכות מחשב ואסמבלר הפתרון לפרק זה נכתב ע"י: רונית )מרציאנו( גל-אור תרגיל 5 ch 00h 00h 00h 00h 00h 00h 00h 00h 00h cx cl 04h 04h 04h 03h 04h 03h 02h 04h 02h 0h 04h 0h 00h ah 45h 04h 00h 26h 02h 00h 32h 03h 00h 82h 08h 00h ax al 45h 05h 4h 26h 06h 0ch 32h 02h 06h 82h 02h 0h si 0000h 000h 0002h 0003h 0004h א. vec db 45h,26h,32h,82h vec2 db 0,0,0,0 vec db 45h,26h,32h,82h vec2 db 4h,0ch,2h,0h sp h 0ffh 00h 00h 00h 00h sp spspsp 0feh 04h 03h 06h 0h 0fdh 0fch 0fbh 0fah 0f0h 0f9h תמונת הזיכרון לפני אחרי הקטע מכפיל את ספרת העשרות באחדות ואת התוצאה בבסיס 2 שם במערך השני בתאים מקבילים. אם נחליף את את הפקודה: mul ah בפקודה imul ah לא יהיה שינוי בתוצאה, אבל, גם ה cf וגם ב ofידלקו, למשל, אם מכפילים בתא במערך vec היה הערך 0ffh והיינו מבצעים כפל של, 0fh * 0fh התוצאה לא נכנסת בבית במספרים מכוונים ולכן נדלקים cf כי התוצאה לא נכנסת בייצוג ו ofכי הראה גלישה במספרים מכוונים. התוצאה שנראה במערך זהה, מכיוון ש 0e(h) (0)225 אמנם נכנס בבית אבלף רק במספרים לא מכוונים. )( )6( )3(
8 ב. בצע טבלת מעקב מה מבצע הקטע? mov ax,4h mov bl,0ah div bl mov cl,4 rol al,cl or al,ah ax bx cx ah al bh bl ch cl mov ax,4h 00h 4h mov bl,0ah 0ah div bl 00h 02h mov cl,4 04h rol al,cl 20h or al,ah 20h הקטע מחלק את הערך הנמצא ב al ב ויוצר מספר חדש המורכב מהתוצאה והשארית של המספר הנמצא ב ax אם למשל ב ax היה בהתחלה (6)65 = (0)0 התוצאה בסיום הקטע הייתה : al=0ah
arr dw 4,2,56,32,2,33,47,36 len= ($-arr)/2 mov ax, data mov ds, ax mov es, ax תרגיל 6 א. התוכנית הראשית ; mov אורך המערך ; cx,len xor אינדקס במערך ; si,si again: mov תא מתאים במערך ; ax,arr[si] הערך במערך מועבר דרך המחסנית לפעולה הבודקת חלוקה ב ; 2 ax push קריאה לפעולה ; divbysix call בדיקה אם המספר מתחלק ב ; 2 al, cmp je אם לא ממשיכים למספר הבא במערך ; movon inc dl אם כן מקדמים את המונה ב ; movon: inc si מערך מילים לכן מקדמים ב ; 6 inc si loop again הוספת 3 הקסה לערך באוגר add dl,30h ; dl כדי שיודפס התו האסקי עם ערך המספר באוגר ; פסיקה להדפסת התו האסקי באוגר mov ah, 02h ;dl int 2h divbytwo proc mov bp,sp mov אם זוגי ; al,0 mov bx,[bp+2] shr חלוקה ב ; 6 bx, adc al,0 ; add carry mov השארית של החלוקה ב 6 מוחזרת דרך המחסנית ; [bp+2],bx ret endp divbytwo הפעולות
divbythree proc mov bp,sp mov ax,[bp+2] mov bl,3 div חלוקת השארית מהחלוקה ב 6 שהתקבלה כפרמטר ב ; 3 bl cmp ah,0 je מתחלק ב 3 ללא שארית ; ok mov al, jmp cont ok: mov al,0 cont: ret 2 endp divbythree divbysix proc mov bp,sp mov ax,[bp+2] push ax call divbytwo pop שארית החלוקה ב ; 6 bx cmp al, je notgood push דחיפת השארית חלוקה ב 6 למחסנית בשביל הבדיקה אם מתחלק ב bx 3 call divbythree notgood: ret 2 endp divbysix
tav db? ; count bits in tav count: mov al,tav mov cl,0 again: shr al, adc cl,0 cmp al,0 jne again continue: mov ch,cl ; keep cl ; check if Even number and ch, jz even ; not even rol tav,cl jmp sof even: ror tav,cl sof: nop תרגיל 7 א. dx יש ערך השונה מ, התשובה ב ax לא תהיה 4. mov ax,8 mov bx,2 div bx bx ולכן אם ב ב. )( לא נכון הפקודה div bx מבצעת חילוק של dx ax ב mov al,56 add al,200 jz stop inc al stop: )6( לא נכון בסים הקטע ah לא ידוע מה יש ב al=
6 0 0 02 02 33 03 30 04 )3( לא נכון בסים הקטע ax=3000h 4 05 06 07 תוכן כתובת array dw,2,3,4 mov bx,array add bx,2 mov ax,[bx] ax=3000h mov cx,3 mov ax, do: shl ax, loop do )4( נכון mov ax,00000b mov bx,000000b or al,3 ax גדול יותר )5( נכון מכיוון שהנתון בשאלה הוא בית והוא נכנס ל אוגר מילה, תמיד ההשוואה בינהם תהיה ש )2( נכון or אם ביט תמיד יתן לא משנה אם הביט המקביל הוא או
3 תרגיל 8 א. באוגר al מאוחסן המספר 6 ובאוגר bl מאוחסן המספר 5. יש לאחסן באוגר dx את סכום המספרים מ al עד bl כולל. קטע לא מבצע mov al,2 mov bl,5 mov dx,0 mov ah,0 mov cl,al sub cl,bl again: add dx,ax inc al loope again nop ch cx cl 02h 0fdh 0fch dx ax bx dh dl ah al bh bl 00h 00h 00h 02h 05h 00h 02h 03h ואז יוצא מהלולאה בגלל ה loope בנוסף שימו לב לערך של cx קטע 2 מבצע mov al,2 mov bl,5 xor dx,dx mov bh,0 again: add dx,bx dec bl cmp bl,al jge again nop
4 קטע 3 לא מבצע alן bl מתאפסים ישר בהתחלה mov al,2 mov bl,5 xor dx,dx xor ax,ax mov bx,0 again: add dx,ax add ax, cmp ax,bx jl again nop ב. לפניך קטע, בצע טבלת מעקב, והראה מצב אוגרי הדגלים לאחר כל אחת מהפקודות: mov ax,0c72ah mov bx,0a98dh shr ax, or al,7h not bh add ax,bx ax bx ah al bh bl zf sf of cf mov ax,0c72ah 0c7h 2ah mov bx,0a98dh 0a9h 8dh shr ax, 63h 95h or al,7h 97h Not bh 56h add ax,bx 0bah 24h 0
5 מבוא לחקר ביצועים שאלה 9 שאלה שאלה שאלה 2
2 תרגיל מודלים חישוביים הפתרון לפרק זה נכתב ע"י רחל לודמר. 3 L L L L 2 L2 L L2 { a k { b k k%2, k 0} k%2 0, k 0} א. כאשר: ב. a b a a b a b b b a a b b
7 4 תרגיל )( אינו נכון. אינה שייכת ל אינה שייכת ל. L המילה הקצרה בשפה היא. )6(. L 3 )במילה הריקה מספר ה ים שווה למספר ה ים והוא (.. L 4 המילה הקצרה ביותר היא. לא שייכת ל אם המילה הריקה לא נמצאת באף אחת מהשפות, היא גם לא נמצאת באיחודם. נכון., 0000 מכיל רצף. L. 0000 ומכאן המילה שייכת לחיתוכם., מספר האפסים זוגי. לכן L 4 0000 L 4 לא נכון. } מכילה 00 w, L { ולא חייבת להכיל רצף. 2 w לדוגמא המילה שייכת ל L 2 ואין בה את הרצף. )3(. w L 3 מספר ה שווה לא נכון. לדוגמא: המילה 00 למספר ה. )w מכילה את הרצף (, אבל w L, w )4( R( L 4 ) { {מספר ה 0 ב w איזוגי w )5( נכון., )R L 4 הן מילים שנקראות מימין לשמאל מהשפה L4 עם שמירה על תכונות הספירה כל המילים ב ) על מספר האפסים. )מספר ה נשאר אי זוגי(, ולכן הן זהות לאוסף המילים שנמצאים בשפה. L4 למשל: 000=w,,w2=R(w)= וגם מילה זו נמצאת בשפה המקורית ובהופכית שלה. כלומר. w 2 L 4 L3 L4 { w לא נכון. { מספר ה ים שונה ממספר ה ים, וגם מספר ה ים הוא אי זוגי )2( המילה.3 מספר ה ים הוא 3 והוא אי זוגי, ומספר ה הוא, ומתקיים. w 000 L L, 000 כי היא מכילה. L 2 אבל 3 4
8 שאלה 5 א. המילה הקצרה היא a 2 cb 4 ב. יש דרכים רבות לפתור את השוואת a 2n לעומת. b 3n אפשרות ראשונה ב a הראשון לדחוף 6 סימנים, וב a השני סימן אחד, או להיפך, ואז לשלוף על כל b. אפשרות שניה על כל זוג של a לדחוף סימן אחד, ועל כל שלישיה של b לשלוף אחד. אפשרות שלישית באחד מבני הזוג של a לדחוף 3 סימנים, ולשלוף על כל b.
שאלה 6
6 תרגיל 7 א. )( )6( )3( )4( תכנות מונחה עצמים Java הפעולה foo() אינה מוגדרת עבור עצם מהטיפוס Object שגיאת קומפילציה. הפעולה foo() אינה מוגדרת עבור עצם מהטיפוס B שגיאת קומפילציה. תקין הפעולה foo() אינה מוגדרת עבור עצם מהטיפוס Object שגיאת קומפילציה. )( ב.
6 Animal 8 תרגיל היררכיית המחלקות: א. Reptile IEggs Mammal Snake Turtle Platypus Lion ב.
66
63 תכנית הבדיקה )לא נדרש בבחינה(: הפלט:
64 תרגיל 9 Shopping s PhoneBill t PhoneBill u Shopping PhoneBill PhoneBill 2000 double total 052 double total 0222 double total 022 char curr d char curr s char curr d String name Baba String company ababetet String company mtaea abablag String list eaaos class Bill MyBills DOLLAR = 'd' MyBills 0 2 3 num SHEKEL = 's' baba bills 0 2 3 dollarrate = 4.0 PhoneBill Shopping PhoneBill double total 2000 double total 000 double total 800 char curr s char curr s char curr s String company ababetet String name Baba String company mtaea abablag String list eaaos Pay: 2000 Shekels to: TeleBaba Baba bought: Books. Pay: 000 Shekels Pay: 800 Shekels to: Galil Telecom 3800 פלט:
65 תרגיל 2 א. ב. 6 3 4 5 Object a A A B B B x(a) 2 x(a) 5 x(a) 2 x(a) 5 x(a) 0 x(b) x(b) -5-5 x(b) 4 40 A aa B x(a) x(b) 3 2 8
62 ג. )( )6( )3( )4( )5( )2(
67 תכנות מונחה עצמים #C הפתרון לפרק זה נכתב ע"י דיתה אוהב-ציון. תרגיל 2 א. א. 2 א. 3 א. 4 שגיאת הידור. העצם g מטיפוס המחלקה Object שלא מכילה ולא מכירה את הפעולה.Foo() )מחלקת אב לא מכירה פעולות שיש בבנים שלה( שגיאת הידור. העצם g מטיפוס המחלקה B שלא מכילה ולא מכירה את הפעולה.Foo() )מחלקת אב לא מכירה פעולות שיש בבנים שלה( תקין. שגיאת הידור. העצם g מטיפוס המחלקה Object שלא מכילה ולא מכירה את הפעולה.Foo() )מחלקת אב לא מכירה פעולות שיש בבנים שלה( ב. המחלקה Artist public class Artist { protected string name; protected double sal; protected static int num; public Artist(double sal, string name) { } public Artist(double sal, string name, string name){} משתנה סטטי על פי הקריאה Artist.num בנאי המתאים לקריאה עם שתי מחרוזות public double Price() { } הפעולה Value() מפעילה אותו public virtual double Calc(double d) { } על פי ההקריאה base.calc() מאחר וב- Singer היא,override הרי באב היא וירטואלית public virtual void Print() { } על פי ההקריאה base.print() מאחר וב Singer היא,override הרי באב היא וירטואלית } public int Train() { } מאחר ואין הגדרה לפעולה כמימוש מהממשק ב Singerהרי היא מוגדרת באב.
68 class Animal תרגיל 22 א. תרשים היררכית המחלקות: class Mammal interface IEggs class Reptile class Lion class Platpus class Snake class Turtle ב. המחלקות : מצורף תדפיס מלא של המחלקות הכולל את סעיפים ב,ג,ד, )יש פעולות בנאי מאחר והרצתי את הפרויקט(. ניתן להגדיר את המאפיין שם החיה, protected ואז אין צורך.Properties הרצה : בתכנית הראשית Lion l = new Lion("Simba"); Console.WriteLine(l); Platypus p = new Platypus("Pery",3); Console.WriteLine(p); Snake s = new Snake("Kaa", 20); Console.WriteLine(s); Turtle t = new Turtle("Batch", 50); Console.WriteLine(t); Animal, Mammal, Lion, Simba Animal, Mammal, Platypus, Pery Eggs=3 Animal, Reptile, Snake, Kaa Eggs=20 Animal, Reptile, Turtle, Batch Eggs=50 תוצאה :.ToString() הפולימורפיזם גורם לכך שכל עצם המפעיל רק המחלקה Animal מכילה את הפעולה הערות : של עצמו. ורק עצם המממש את ממשק הIEggs מציג את Details() אותה )יורש... ) מפעיל את נתוני הביצים וירטואלית מאחר ויש לדרוס אותה בכל המחלקות הפעולה Details() public virtual string במחלקה זוחלים מוגדר מאפיין למספר הביצים והיא מממשת את המימשק. במחלקה ברווזון מוגדר מאפיין לביצים והיא מממשת את הממשק.
6 interface IEggs { int GetNumOfEggs(); } public abstract class Animal { private string name; public Animal(string name) { this.name = name; } } public void Move() { Console.WriteLine("move"); } public void Turn() { Console.WriteLine("turn"); } public virtual string Details() { return "Animal, "; } public override string ToString() { string st = this.details() + " " + this.name; } if (this is IEggs) st += " Number of eggs: " + ((IEggs)this).GetNumOfEggs(); return st; public abstract class Mammal : Animal { public Mammal(string name) : base(name) { } public override string Details() { return base.details() + " Mammal,"; } } public abstract class Reptile : Animal,IEggs { private int numofeggs; } public Reptile(string name,int num ) : base(name) { this.numofeggs = num; } public int GetNumOfEggs() { return this.numofeggs; } public override string Details() { return base.details() + " Reptile, "; } public class Lion : Mammal { public Lion(string name) : base(name) { } } public override string Details() { return base.details() + " Lion, "; }
3 public class Platypus:Mammal,IEggs { private int numofeggs; } public Platypus(string name, int num) : base(name) { this.numofeggs = num; } public int GetNumOfEggs() { return this.numofeggs; } public override string Details() { return base.details() + " Platypus, "; } public class Snake : Reptile { public Snake(string name,int num) : base(name,num) { } } public override string Details() { return base.details() + " Snake, "; } public class Turtle : Reptile { public Turtle(string name,int num) : base(name,num) { } public override string Details() { return base.details() + " Turtle, "; } }
3 Pay: 2000 Shekel to: TeleBaba Baba bought: Books. Pay: 000 Shekel Pay: 800 Shekel to: Galil Telecom 3800 תרגיל 23 הפלט:
36 ההוראה השלישית ;a B =b שגויה. עצם מטיפוס מחלקה יורשת לא יכול להחזיק עצם ממחלקת האב. יש לבצע המרה (B)a; B b = A 24 aa = new B(3, 0); תרגיל א. ב. aa.sub(); תפעיל את הפעולה מ- B הדורסת לכן הערך ישתנה ל- 8 השורה ((A)ar[3]).TripleX(); תשנה את הערך 5- B.x= )הפעולות המופעלת הן הפעולות הדורסות של.( B השורה ((B)ar[4]).TenTimesX(); תשנה את הערך B.x= 40
33 ;xa=98 xb=99 תקין. הפלט : ג.. ((B)a2).TenTimesX(); a2.tentimesx(); לא תקין - שגיאת הידור. הפניה מטיפוס האב לא מכירה פעולות ממחלקות יורשות. תיקון אפשרי :.2 3. אותה שגיאה. ה- if לא משנה. ((B)a).TenTimesX(); שגיאת זמן ריצה. הפניה מטיפוס האב המחזיקה עצם מטיפוס אב לא מכירה את היורשים ממנה..4 ;xa=2 xb=97 5. תקין. הפלט :.6 תקין. הפלט :.2